#include "AdParse.h"
#include "AdDao.h"
#include "stdio.h"
#include <glib.h>
#define LOCAL_PATH "/home/ly/ly_ads/media"
#include "SendRequest.h"

/**
 * 这个函数的作用就是根据资源的线上路径，获取本地路径
 */
char* getResPath(AdResource *ar)
{
    int adId = ar->ad_id;
    char* path = ar->path;
    char* fileName = g_path_get_basename(path);
    char* formatStr = "%s/%d_%s";
    return g_strdup_printf(formatStr,LOCAL_PATH,adId,fileName);
}

/**
 * 判断广告列表是否更新
 * 如果需要更新，就下载媒体文件到本地并存入数据库
 */
int downloadResAndGenLocalAdListToSqlite(Ad* ads[],int size)
{
    // 默认不需要更新
    int result = 0;
    // 遍历广告数组，并查询数据库看有没有该广告
    for(int i=0;i<size;i++)
    {
        Ad *ad = ads[i];
        int adId = ad->id;
        // 根据广告ID查询广告信息
        Ad* adFromDb = getAd(adId);
        // 若为空，则表示这个广告是新的
        if(adFromDb == NULL)
        {
            result = 1;
            // ad存入数据库
            saveAd(ad);
            // 广告信息处理完了以后，还要处理广告资源信息
            for(int j=0;j<3;j++)
            {
                AdResource *ar = ad->resources[j];
                if(ar == NULL){
                    continue;
                }
                // 获取网络资源在本地的存放路径
                char* resPath = getResPath(ar);

                // 下载线上资源文件到指定路径
                int res = downloadRes(ar->path,resPath);
                if(res == -1)
                {
                    printf("文件下载失败\n");
                    continue;
                }

                // 修改ar.path=本地路径
                ar->path = resPath;

                // 存入数据库
                saveAr(ar);
            }
        }else{
            // 数据库存在该条广告需更新广告信息
            updateAd(ad);
            // 更新广告资源信息
            for (int j = 0; j < 3; j++)
            {
                AdResource* ar = ad->resources[j];
                if(ar == NULL)
                {
                    continue;
                }
                // 看这个文件是否发生改变
                char* sign = ar->sign;
                // 获取本地文件的加密后的字符串，和sign做比较
                char* localPath = getResPath(ar);
                gboolean exists = g_file_test(localPath,G_FILE_TEST_EXISTS);
                if(!exists)
                {
                    result = 1;
                    downloadRes(ar->path,localPath);
                    ar->path = localPath;
                    updateAr(ar);
                }else{
                    // 对localPath这个路径的文件做md5加密，然后再和服务器响应回来的sign做比较
                    //char* localFIleSign = getMd5(localPath);
                    char* localFileSign = "jfjjfjfjj";
                    if(!g_str_equal(sign,localFileSign))
                    {
                        result = 1;
                        downloadRes(ar->path,localPath);
                        ar->path = localPath;
                        updateAr(ar);
                    }else{
                        printf("当前媒体资源没有更新，本次不做处理!\n");
                    }
                }
            }
        }
    }
    return result;
}